﻿<Serializable()> _
Public Class Contrato
    Inherits BaseDominio

#Region "Dominio"

    Private _cliente As Cliente
    Public Overridable Property Cliente() As Cliente
        Get
            Return _cliente
        End Get
        Set(ByVal value As Cliente)
            _cliente = value
        End Set
    End Property

    Private _loja As Loja
    Public Overridable Property Loja() As Loja
        Get
            Return _loja
        End Get
        Set(ByVal value As Loja)
            _loja = value
        End Set
    End Property

    Private _vestuarios As IList(Of Vestuario)
    Public Overridable Property Vestuarios() As IList(Of Vestuario)
        Get
            Return _vestuarios
        End Get
        Set(ByVal value As IList(Of Vestuario))
            _vestuarios = value
        End Set
    End Property


    Private _tipoContrato As EnumTipoContrato
    Public Overridable Property TipoContrato() As EnumTipoContrato
        Get
            Return _tipoContrato
        End Get
        Set(ByVal value As EnumTipoContrato)
            _tipoContrato = value
        End Set
    End Property


#End Region

#Region "Negocio"

    Public Sub New()
        MyBase.New()
    End Sub

    Public Overridable Function Buscar(ByVal _id As Long) As Contrato
        Return MyBase.ContratoDao.Buscar(_id)
    End Function

    Public Overridable Function PodeSalvar() As Boolean

        If Me.Cliente Is Nothing Then Throw New ArtNoiException("É preciso informar ao menos um vestuário")
        If Me.Vestuarios Is Nothing Then Throw New ArtNoiException("É preciso informar ao menos um vestuário")
        If Not Me.Cliente.Id.HasValue Then Throw New ArtNoiException("É preciso informar ao menos um vestuário")
        If Me.Loja Is Nothing Then Throw New ArtNoiException("É preciso informar uma loja.")

        For Each _vestuario In Me.Vestuarios
            If _vestuario Is Nothing Then Throw New ArtNoiException("É preciso informar ao menos um vestuário")
            If Not _vestuario.Id.HasValue Then Throw New ArtNoiException("É preciso informar ao menos um vestuário")
        Next

        Return True

    End Function

    Public Overridable Sub Salvar(ByVal _cliente As Cliente, ByVal _loja As Loja, ByVal _vestuarios As IList(Of Vestuario))
        Me.Cliente = _cliente
        Me.Loja = _loja
        Me.Vestuarios = _vestuarios
        Me.Salvar()
    End Sub

    Private Sub Salvar()
        If Me.PodeSalvar Then
            MyBase.ContratoDao.Salvar(Me)
        End If
    End Sub

    Public Overridable Function BuscarPorCliente(ByVal _cliente As Cliente) As IList(Of Contrato)

        Return MyBase.ContratoDao.BuscarPorCliente(_cliente)

    End Function

    Public Overridable Function BuscarPorLoja(ByVal _loja As Loja) As IList(Of Contrato)

        Return MyBase.ContratoDao.BuscarPorLoja(_loja)

    End Function

    Public Overridable Function BuscarPorVestuario(ByVal _vestuario As Vestuario) As IList(Of Contrato)

        Return MyBase.ContratoDao.BuscarPorVestuario(_vestuario)

    End Function

#End Region

    Enum EnumTipoContrato
        Aluguel
        Venda
    End Enum

End Class